iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
Software Development

做一支專屬自己學校的課程評價 LINE Bot 吧!系列 第 7

[Day 07] 變數命名: 利用 models.py 建立課程評價資料表

  • 分享至 

  • xImage
  •  

資料庫就像是大腦

為了可以讓機器人根據使用者的訊息進行特定課程回覆,需要建立一個資料庫,而 Django 提供了 SQLite 資料庫協助開發者儲存資料與原生後台。

會使用到的 Field 類型

Django 有提供欄位不同的類型,實際上在官方文件上有十幾種以上,基礎教學將列出以下幾種:

  • CharField 適合存放短文,需要利用 max_length 指定文字最大長度
  • TextField 適合存放長文,像是評價內容,不需要指定文字長度
  • DateTimeField 存放日期與時間,可以選擇創該筆資料當下或是更新的日期

上述內容會在等等的程式碼看到。

定義需求

  • 想要只要輸入課程名稱,就會回傳資料庫內該課程的所有評價
    • 課程評價資料表會有:
      • 類型 (通識、體育、教育學程)
      • 課名
      • 授課教師
      • 投稿者
      • 內容
      • 評價學期
      • 最近修改日期

編寫資料表 (Table)

我們必須告訴 Django 需要存放的資料庫結構 (Table Schema),以下都會在 hulolo > chatbot > models.py 編寫。

  1. 引入相關套件,待會會使用到:

    #hulolo > chatbot > models.py
    from django.db import models
    from django.utils.translation import gettext_lazy as _
    
  2. 先新增一個名為 Course 類別用來存放課程評價的 Table,其中先含有 course_type變數:

    #hulolo > chatbot > models.py
    class Course(models.Model):
        class TypeInCourse(models.TextChoices):
            course_type = models.CharField(
                max_length=3,
                verbose_name="類型",
            )
    
  3. 因為課程類型的重複性高,固定是某幾種,適合使用選項的功能,讓新增的時候可以做選擇,可以在 Course 類別中再包一層類別名為 TypeInCourse 用來做選項:

    #hulolo > chatbot > models.py
    class Course(models.Model):
        class TypeInCourse(models.TextChoices):
            GENERAL = "GEN", _("通識課程")
            EDUCATION = "EDU", _("教育學程")
            PE_SOPHOMORE = "PSS", _("大二體育")
            PE_JUNIOR_SENIOR = "PJS", _("大三四體育")
            LANGUAGE = "LAN", _("精進中英外文")
            MILITARY = "MIL", _("軍訓")
    
        #此行以下會有剛剛 1. 的 Code
    
  4. 我們將 coursr_type 變數做一些修改,讓 TypeInCourse 可以正確被引入:

    #hulolo > chatbot > models.py
    #此段程式碼位於 Course Class
    course_type = models.CharField(
        max_length=3,
        choices=TypeInCourse, #選項引用自 TypeInCourse
        verbose_name="類型",
        default=TypeInCourse.GENERAL, #預設為通識課程 TypeInCourse.GENERAL
        )
    

    default 是希望一建立新資料表就預測填入的內容。

  5. 接著將其他欄位資訊也編寫進去:

    #hulolo > chatbot > models.py
    #此段程式碼位於 Course Class,接續在 course_type 變數之下
    course_name = models.CharField(
        max_length=20, 
        verbose_name="課名", 
        help_text="以教務系統顯示的全名為主"
    )
    
    teacher_name = models.CharField(
        max_length=20,
        verbose_name="老師/【合開】",
        help_text="【合開】連【】也要記得輸進去哦!",
    )
    
    submitter_name = models.CharField(
        max_length=15, 
        default="匿名", 
        verbose_name="投稿者", 
        help_text="不口以超過15字"
    )
    
    feedback_content = models.TextField(
        verbose_name="內容"
    )
    
    evaluation_semester = models.CharField(
        max_length=5,
        default="113-1",
    )
    
    last_updated_time = models.DateTimeField(
        auto_now=True, 
        verbose_name="上次修改日期"
    )
    
    

    verbose_name 是之後給人類看的欄位名稱,可以取中文,稍晚會在後台管理看到;help_text 一樣會出現在後台管理,主要是放提醒管理人員的文字;auto_now 則是記錄該筆資料被修改當下的日期,可以做為上次修改日期之用。

變數命名慣用規則 (naming convention)

有沒有注意到有些變數是以「全小寫加上_」,有些則是使用「單詞字首大寫」,有的則是「全大寫加上_」,這樣的規則是有規律可巡,屬於開發者之間的默契,最初是由 Python 拔拔 Guido van Rossum 的撰寫風格,後來改良沿用至今,其實用錯也不會被抓去關,但善用可幫助開發時快速了解變數的性質,也能看懂網路上的開源專案。而新手編寫程式最常見 a = 1 懶癌命名法,這樣的命名無法知道該變數的用途,當寫專案的時候可以試著依照以下規律進行命名 (Python 與 Django 慣用規則):

  • 「全小寫加上_」(蛇形 Snake case) ,如 last_updated_time
    • 最常見,用於 Function 函式與一般非下列情況的變數取名
  • 「全大寫加上_」(尖叫蛇蛇 Screaming Snake Case),如 PE_SOPHOMORE
    • 用於環境變數,密鑰,固定值不會變化的變數
  • 「單詞字首大寫」(大駝峰 Upper camel case),如 CourseCourseAdmin
    • 用於對 Class 類別取名
  • 「全小寫加上-」(烤肉串 Kebab case),如 chat-bot
    • 用於編寫網址用,能增加網址對一般大眾可讀性,對 SEO Google 搜尋結果與排名有幫助
    • 我自己取資料夾與檔名的時候會使用~

小駝峰 lower camel case 則會在之後編寫網頁 JavaScript 時所使用,Python 較少使用。

再往前一點點

  • 變數命名慣用規則也有針對如何有意義的命名,屬於 Clean Code 範疇
  • gettext_lazy 是 Django 中用來處理延遲翻譯的一個函數,執行的時候不會立即編譯
  • 關聯式的資料表能夠更有效的管理資料庫

覆盤

在這篇文章中,我們學會了:

  • models.py 是主要用來編寫資料表 (Table)
  • Field 的類型主要常見的有三種 (CharField、TextField、DateTimeField)
  • 變數命名慣用規則在 Python 主要有四種 (Snake、Screaming Snake、Upper camel、Kebab)
  • 透過 models 中的 verbose_name 以及 help_text 可以幫助未來後台管理的辨識
  • Day 07 原始碼

上一篇
[Day 06] 原型設計: 歸剛只會回你貓貓圖 (ImageSendMessage) 的 LINE Bot 聊天機器人
下一篇
[Day 08] 遷移與利用 admin.py 顯示後台課程評價資料表
系列文
做一支專屬自己學校的課程評價 LINE Bot 吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言